package org.nobject.common.text;

import java.util.LinkedHashSet;
import java.util.Set;

import org.nobject.common.lang.ArrayUtils;
import org.nobject.common.lang.CharUtils;
import org.nobject.common.lang.StringUtils;

/**
 * 单词工具类
 *
 * @author bianrongjun
 * @version 1.0
 */
public class WordUtils {
	
	/** 获取前缀词,寻找第一个大写字母前的词*/
	public static String getPrefix(String str){
		if(str.length()<=1) return str;
		char[] cs=CharUtils.toChars(str);
		for (int i = 1; i < cs.length; i++) {
			if(Character.isUpperCase(cs[i])) return str.substring(0, i);
		}
		return str;
	}
	
	/** 
	 * 按驼峰式分割
	 * @param str
	 * @return
	 */
	public static String[] splitByCamel(String str){
		Set s=new LinkedHashSet();
		char[] cs=CharUtils.toChars(str);
		int p=0;
		for (int i = 1; i < cs.length; i++) {
			if(Character.isUpperCase(cs[i])) {
				s.add(str.substring(p, i));	
				p=i;
			}
		}
		if(p<cs.length) s.add(str.substring(p,str.length()));
		return (String[])ArrayUtils.toArray(s, String.class);
	}
	
	/** 
	 * 分割试转驼峰
	 * @param str
	 */
	public static String split2Camel(String str){
		String [] ss=str.split("_");
		StringBuffer sb=new StringBuffer();
		
		for (int i = 0; i < ss.length; i++) {
			sb.append(firstToUpperCase(ss[i]));
		}
		return sb.toString();
	}
	
	/** 第一个字母变大写 */
	public static String firstToUpperCase(String str) {
		if (str.length() > 1) return str.substring(0, 1).toUpperCase() + str.substring(1);
		return str.toUpperCase();
	}

	/** 第一个字母变小写 */
	public static String firstToLowerCase(String str) {
		if (str.length() > 1) return str.substring(0, 1).toLowerCase() + str.substring(1);
		return str.toLowerCase();
	}
	
	public static void main(String[] args) {
		String s="str";
		String[] ss=splitByCamel(s);
		System.out.println(StringUtils.toString(ss));
	}
}
